/*
 * 项目:	ofs.web  
 * 文件:	CustomizedFastJsonHttpMessageConverter.java  
 * 包名:	com.qjdchina.ofs.web.common.fastjson  
 * 日期:	2016年3月1日上午8:53:12  
 * 版权：Copyright (c) 2016, qjdchina.com All Rights Reserved.  
 *  
 */

package com.qjdchina.sku.web.common.fastjson;

import java.io.IOException;
import java.io.OutputStream;
import java.nio.charset.Charset;

import org.springframework.http.HttpOutputMessage;
import org.springframework.http.converter.HttpMessageNotWritableException;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;


/**
 * 
 * 类名:CustomizedFastJsonHttpMessageConverter    
 * 功能:自定义Fastjson转换格式，调整了默认的时间格式为：年-月-日（yyyy-MM-dd）     
 * 日期: 2016年3月1日 上午8:55:53    
 * @author wangzheng  
 * @version 1.0.0   
 * @since  JDK 1.7  
 * @see
 */
public class CustomizedFastJsonHttpMessageConverter extends FastJsonHttpMessageConverter {

    public final static Charset UTF8 = Charset.forName("UTF-8");

    private Charset charset = UTF8;

    private SerializerFeature[] customizedFeatures = new SerializerFeature[0];

    private static final String SHORT_DATE_FORMAT = "yyyy-MM-dd";

    private static final String LONG_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";

    public CustomizedFastJsonHttpMessageConverter() {
        super();
    }


    public void setCustomizedFeatures(SerializerFeature... customizedFeatures) {
        this.customizedFeatures = customizedFeatures;
    }


    @Override
    protected void writeInternal(Object obj, HttpOutputMessage outputMessage) throws IOException,
            HttpMessageNotWritableException {

        OutputStream out = outputMessage.getBody();

        //NOTE：OFS的消息中心，时间格式还是要求为年-月-日 时:分:秒，其他接口为年-月-日
        if (checkNeedShortDateFormat(obj, outputMessage)) {
            JSON.DEFFAULT_DATE_FORMAT = SHORT_DATE_FORMAT;
        } else {
            JSON.DEFFAULT_DATE_FORMAT = LONG_DATE_FORMAT;
        }


        String text = JSON.toJSONString(obj, customizedFeatures);
        byte[] bytes = text.getBytes(charset);
        out.write(bytes);
    }

    /**
     * 
     * 通过入参判断接口类型：   OFS的消息中心，时间格式还是要求为年-月-日 时:分:秒，其他接口为年-月-日
     * @author wangzheng 2016年3月1日 上午8:57:51   
     * @param obj
     * @param outputMessage
     * @return  
     * @since JDK 1.7
     */
    private boolean checkNeedShortDateFormat(Object obj, HttpOutputMessage outputMessage) {
        //通过反射判断VO类型，消息中心的VO暂未定
        
        return true;
    }
}
